package es.uned.etsii.si3.taller;

import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;
import java.sql.SQLException;
import java.util.List;

/**
 * El tipo "EmpleadoTaller" almacena la relación entre usuario y taller en el que trabaja
 **/
@DatabaseTable(tableName = "empleadostaller")
public class EmpleadoTaller extends Persistente {
	public static final String ID_USUARIO_FIELD_NAME = "id_usuario";
	public static final String ID_TALLER_FIELD_NAME = "id_taller";
	public static final String ID_SECCION_FIELD_NAME = "id_seccion";
	
	@DatabaseField(generatedId = true)
	int id;
	@DatabaseField(foreign = true, maxForeignAutoRefreshLevel=5, foreignAutoRefresh=true, columnName = ID_USUARIO_FIELD_NAME)
	Usuario usuario;
	@DatabaseField(foreign = true, maxForeignAutoRefreshLevel=5, foreignAutoRefresh=true, columnName = ID_TALLER_FIELD_NAME)
	Taller taller;
	@DatabaseField(foreign = true, maxForeignAutoRefreshLevel=5, foreignAutoRefresh=true, columnName = ID_SECCION_FIELD_NAME)
	Seccion seccion;

	/**
	 * Factoría para crear nuevos clientes partiendo de un conjunto de datos,
	 * al tiempo que se crear el objeto en la base de datos
	 *
	 * @param  usuario         usuario al que está asociado esta información
	 * @param  taller          taller al que está asociado esta información
	 * @param  seccion         seccion a la que está asociada esta información
	 * @return                 un nuevo objeto, ya guardado en la base de datos
	 */
	public
	static EmpleadoTaller crear(Usuario usuario, Taller taller, Seccion seccion) throws SQLException
	{
		EmpleadoTaller empleadoTaller = new EmpleadoTaller();

		empleadoTaller.setUsuario(usuario);
		empleadoTaller.setTaller(taller);
		empleadoTaller.setSeccion(seccion);
		getClassDao(EmpleadoTaller.class).create(empleadoTaller);

		return empleadoTaller;
	}

	/**
	 * Devuelve el objeto EmpleadoTaller correspondiente a un usuario dado
	 * 
	 * @param usuario
	 * @throws SQLException
	 */
	public
	static EmpleadoTaller buscarPorUsuario(Usuario usuario) throws SQLException {
		List<EmpleadoTaller> empleadosTaller = getClassDao(EmpleadoTaller.class).queryForEq(ID_USUARIO_FIELD_NAME, usuario);

		if (empleadosTaller.size() == 0)
			return null;

		if (empleadosTaller.size() > 1) {
			// TODO
		}

		return empleadosTaller.get(0);
	}

	public
	EmpleadoTaller() {
		// ORM Lite necesita un constructor por defecto
	}

	/**
	 * getters y setters
	 */	
	public int       getId()              { return id; }
	public Usuario   getUsuario()         { return usuario; }
	public Taller    getTaller()          { return taller; }
	public Seccion   getSeccion()         { return seccion; }
	
	public
	void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public
	void setTaller(Taller taller) {
		this.taller = taller;
	}

	public
	void setSeccion(Seccion seccion) {
		this.seccion = seccion;
	}
}
